package Ecras;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import Controladores.CtlBilhetes;
import Utilities.EventoCombo;
import Utilities.LugarCombo;

public class EcraBilhetes {

	private JFrame frame;
	private JTextField horaText;
	private CtlBilhetes ctlBilhetes;
	private ArrayList<EventoCombo> listaEventos;
	private ArrayList<EventoCombo> listaEventosSemDuplicados;
	private ArrayList<LugarCombo> listaLugares;
	private JComboBox<String> eventoCombo;
	private JTextField datatext;
	private JComboBox<Integer> lugarCombo;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					EcraBilhetes window = new EcraBilhetes();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public EcraBilhetes() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 388, 214);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);

		JLabel lblEvento = new JLabel("Evento");
		lblEvento.setBounds(10, 11, 46, 14);
		frame.getContentPane().add(lblEvento);

		eventoCombo = new JComboBox<String>();
		eventoCombo.setBounds(76, 8, 280, 20);
		frame.getContentPane().add(eventoCombo);

		ctlBilhetes = new CtlBilhetes();
		listaEventos = ctlBilhetes.getEventos();

		JLabel lblData = new JLabel("Data");
		lblData.setBounds(10, 49, 46, 14);
		frame.getContentPane().add(lblData);

		JLabel lblHora = new JLabel("Hora");
		lblHora.setBounds(205, 49, 46, 14);
		frame.getContentPane().add(lblHora);

		horaText = new JTextField();
		horaText.setEditable(false);
		horaText.setBounds(237, 46, 119, 20);
		frame.getContentPane().add(horaText);
		horaText.setColumns(10);

		JLabel lblLugar = new JLabel("Lugar");
		lblLugar.setBounds(10, 103, 46, 14);
		frame.getContentPane().add(lblLugar);

		lugarCombo = new JComboBox<Integer>();
		lugarCombo.setBounds(76, 100, 148, 20);
		frame.getContentPane().add(lugarCombo);

		datatext = new JTextField();
		datatext.setEditable(false);
		datatext.setBounds(76, 46, 103, 20);
		frame.getContentPane().add(datatext);
		datatext.setColumns(10);

		for (EventoCombo evento : removeDups()) {
			eventoCombo.addItem(evento.getNomeEvento());
		}
		eventoCombo.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				getLugares();
			}
		});

		JButton btnConfirmar = new JButton("Confirmar");
		btnConfirmar.setBounds(66, 145, 109, 23);
		frame.getContentPane().add(btnConfirmar);
		btnConfirmar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (ctlBilhetes.mudaEstadoBilhete(
						eventoCombo.getSelectedItem(),
						lugarCombo.getSelectedItem())) {
					JOptionPane.showMessageDialog(null, "Bilhete reservado");
					getLugares();
				}

			}
		});

		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.setBounds(206, 145, 103, 23);
		frame.getContentPane().add(btnCancelar);

	}

	private List<EventoCombo> removeDups() {
		listaEventosSemDuplicados = new ArrayList<>();
		boolean igual;
		for (EventoCombo e : listaEventos) {
			igual = false;
			for (EventoCombo nodups : listaEventosSemDuplicados) {
				if (e.getNomeEvento().equals(nodups.getNomeEvento())) {
					igual = true;
				}
			}
			if (!igual) {
				listaEventosSemDuplicados.add(e);
			}
		}
		return listaEventosSemDuplicados;

	}

	private void getLugares() {
		lugarCombo.removeAllItems();
		for (EventoCombo evento : listaEventosSemDuplicados) {
			if (evento.getNomeEvento().equals(
					eventoCombo.getSelectedItem())) {
				datatext.setText(evento.getData());
				horaText.setText(evento.getHora());
				listaLugares = ctlBilhetes.getLugares(evento.getIdEvento());
				for (LugarCombo lugar : listaLugares) {
					if (lugar.getEstado() == 0) {
						lugarCombo.addItem(lugar.getNumeroLugar());
					}
				}
			}
		}
	}
}
